﻿using System.Collections.Generic;
using System.Linq;
using Utility.Persistence_Service;
using Utility.Persistence_Service.Implementations;

namespace Application_Core.Bauteil_Component.Data_Access_Layer.Implementations
{
    internal class BauteilRepositoryImpl : RepositoryImpl<Bauteil>, BauteilRepository
    {
        public BauteilRepositoryImpl(UnitOfWork unitOfWork)
            : base(unitOfWork) { }

        /// <summary>
        /// Gibt das Bauteil der gegebenen Nummer zurück.
        /// </summary>
        /// <param name="bauteilnummer">Bauteil-Nummer</param>
        /// <returns>Bauteil | null</returns>
        public Bauteil FindByNummer(int bauteilnummer)
        {
            return (from b in this.unitOfWork.Query<Bauteil>() where b.Nummer == bauteilnummer select b)
                .FirstOrDefault() ?? null;
        }

        /// <summary>
        /// Gibt den technischen Schlüssel eines Bauteils anhand der gegebenen Beuteilnummer zurück.
        /// </summary>
        /// <param name="bauteilnummer">Bauteil-Nummer</param>
        /// <returns>BauteilId | null</returns>
        public List<Bauteil> FindByName(string name)
        {
            return (from b in this.unitOfWork.Query<Bauteil>() where b.Name == name select b)
                .ToList();
        }

        /// <summary>
        /// Gibt alle Bauteile mit gegebenen Namen zurück.
        /// </summary>
        /// <param name="name">Bauteil-Name</param>
        /// <returns>List<Bauteil></returns>
        public int? FindIdByNummer(int bauteilnummer)
        {
            int? bauteilId = null;
            Bauteil bauteil = this.FindByNummer(bauteilnummer);
            if (bauteil != null)
            {
                bauteilId = bauteil.Id;
            }
            return bauteilId;
        }
    }
}
